/*******************************************************************************
 * Copyleft (c) 2021 Kcode
 *
 * @file    video_recv_manager.h
 * @brief   视频数据管理者头文件，向下支持各种视频数据，向上提供接口
 * @author  K
 * @version 0.0.1
 * @date    2021-07-26
 * @license MulanPSL-1.0
 *
 * 文件修改历史：
 * <时间>       | <版本>    | <作者>  | <描述>
 * 2021-08-11   | v0.0.1    | Kcode   | 视频数据管理者头文件
 * -----------------------------------------------------------------------------
 ******************************************************************************/

#include <pthread.h>
#include "pic_operation.h"

#ifndef _VIDEO_MANAGER_H
#define _VIDEO_MANAGER_H

/*!
 * 存储视频数据
 */
typedef struct VideoBuf {
    T_PIXELDATAS pixel_data;    /**< 借用T_PixelDatas */
    int pixel_format;           /**< 像素格式 */

    /* signal fresh frames */
    pthread_mutex_t db;
    pthread_cond_t  db_update;
}T_VIDEOBUF, *PT_VIDEOBUF;

/*!
 * 视频数据处理结构体
 */
typedef struct VideoRecv {
    char *name; /**< 设备名 */
    
    /* 初始化设备 */
   int (*Init)(int *SocketClient);

    /* 连接服务器 */
    int (*ConnectToServer)(int *SocketClient, const char *ip);

    /* 断开服务器 */
    int (*DisConnectToServer)(int *SocketClient);

    /* 获得视频格式 */
    int (*GetFormat)(void);

    /* 获取video数据 */
    int (*GetVideo)(int *SocketClient, PT_VIDEOBUF ptVideoBuf);
    
    struct VideoRecv *ptNext;
}T_VIDEORECV, *PT_VIDEORECV;

/*!
 * @brief  初始化函数，把对支持的各个设备注册进链表进行统一管理
 * @param  [in] 无
 * @return  无
 */
int video_recv_init(void);

/*!
 * @brief  显示所支持的设备
 * @param  [in] 无
 * @return 无 
 */
void ShowVideoOpr(void);

/*!
 * @brief  注册函数
 * @param  ptVideoRecv[in] 要注册的设备结构体结点
 * @return 0：成功 -1：失败
 */
int RegisterVideoRecv(PT_VIDEORECV ptVideoRecv);

int VideoRecvInit(void);

void ShowVideoRecv(void);

PT_VIDEORECV GetVideoRecv(char *pName);

#endif /* _VIDEO_MANAGER_H */

